iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0
Software Development

Qt 6 跨平台應用程式開發系列 第 27

D27: Qt 發出網路請求

  • 分享至 

  • xImage
  •  

在當今的網際網路世界中,就算是桌機應用程式,與伺服器或其他遠程資源進行通訊也已經是不可避免的。

Qt 提供了一系列的函式庫,使得進行網路請求變得非常簡單。今天,我們就要學習怎麼使用 Qt 發送和接收網路請求。

引入必要的模組

而今天的「網路通訊」是在一個新的 NetWork 模組中。所以首先你需要在你的 .pro 檔案中加入 network 模組:

QT += network

接著,在程式碼中引入必要的標頭檔:

#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>

發送 GET 請求

讓我們開始發送一個簡單的 GET 請求:

QNetworkAccessManager manager;
QUrl url("https://api.thecatapi.com/v1/images/search?limit=1");
QNetworkRequest request(url);

QNetworkReply* reply = manager.get(request);
connect(reply, &QNetworkReply::finished, [=]() {
    if (reply->error() == QNetworkReply::NoError) {
        QString data = reply->readAll();
        // 處理資料
    } else {
        // 處理錯誤
    }
    reply->deleteLater();
});

我們使用 QNetworkAccessManager 來發送一個 GET 請求。當請求完成時後,讀取回覆的資料。這裡我們呼叫了免費的 the cat api,每次呼叫都會回傳一張貓咪的圖片。

發送 POST 請求

如果你想要發送一個 POST 請求,可以這麼做:

QNetworkAccessManager manager;
QUrl url("https://api.example.com/upload");
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");

QByteArray postData = R"({"key": "value"})"; // 假設你要發送 JSON 資料

QNetworkReply* reply = manager.post(request, postData);
connect(reply, &QNetworkReply::finished, [=]() {
    if (reply->error() == QNetworkReply::NoError) {
        QString response = reply->readAll();
        // 處理回覆資料
    } else {
        // 處理錯誤
    }
    reply->deleteLater();
});

處理錯誤

QNetworkReply 物件提供了一個 error() 函數,這讓你可以檢查請求是否成功。如果有錯誤,你可以用 errorString() 取得比較詳細的錯誤訊息。


上一篇
D26: Qt 讀寫 JSON 檔案
下一篇
D28: 「設定」記住使用者的喜好
系列文
Qt 6 跨平台應用程式開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言